import { message } from 'ant-design-vue'

/**
 * 全局错误处理函数
 * 
 * 过滤掉一些常见的无害警告：
 * 1. SES_UNCAUGHT_EXCEPTION - SES (Secure ECMAScript) 开发环境警告
 * 2. ResizeObserver loop completed - 浏览器 ResizeObserver API 的正常行为
 * 3. Non-Error promise rejection - Promise 拒绝但不是真正的错误
 */
export function setupErrorHandler() {
  window.onerror = (msg, url, line, column, error) => {
    const msgStr = msg?.toString() || ''
    
    // 忽略 SES 相关的错误
    if (msgStr.includes('SES_UNCAUGHT_EXCEPTION')) {
      return true // 阻止错误继续传播
    }
    
    // 忽略 ResizeObserver 相关的警告（这是浏览器的正常行为，不是真正的错误）
    if (msgStr.includes('ResizeObserver loop completed with undelivered notifications')) {
      return true // 阻止错误继续传播
    }
    
    // 忽略其他常见的无害警告
    if (msgStr.includes('Non-Error promise rejection captured')) {
      return true
    }
    
    console.error('Global error:', { msg, url, line, column, error })
    message.error('系统出现异常，请刷新页面重试')
    return false
  }

  // 处理未捕获的 Promise 错误
  window.addEventListener('unhandledrejection', (event) => {
    const reasonStr = event.reason?.toString() || ''
    
    // 忽略 SES 相关的错误
    if (reasonStr.includes('SES_UNCAUGHT_EXCEPTION')) {
      event.preventDefault()
      return
    }
    
    // 忽略 ResizeObserver 相关的警告
    if (reasonStr.includes('ResizeObserver loop completed with undelivered notifications')) {
      event.preventDefault()
      return
    }
    
    // 忽略其他常见的无害警告
    if (reasonStr.includes('Non-Error promise rejection captured')) {
      event.preventDefault()
      return
    }
    
    console.error('Unhandled promise rejection:', event.reason)
    message.error('系统出现异常，请刷新页面重试')
  })
} 